<?php
/**
 * @brief Klasa generująca formularz dodawania lub edycji towaru
 */
class Application_Form_AddCommodity extends Zend_Form
{
    /**
     * @brief Metoda inicjująca
     * 
     * Metoda generująca obligatoryjne kontrolki formularza
     * do tworzenia lub edycji towarów definiowanych przez użytkowników.
     * Zawiera:
     * - Kontrolkę wyboru typu towaru z zadeklarowane wcześniej kategorii
     * - Pole tekstowe na nazwę towaru
     * - Pole tekstowe na opis towaru
     * - Kontrolkę wyboru lokalizacji lub połączenia w którym oferowany będzie towar
     * - Pola tekstowe na daty dostępności towaru*
     * - Kontrolka wyboru terminu dostaw*
     * - Przycisk akceptacji danych z formularza
     * 
     * *Za każdym razem tylko jedna metoda wyboru okresu będzie akceptowana.
     * 
     * Klasa przez odziedziczony konstruktor przyjmuje tablicę z informacjami o:
     * -# Nazwie użytkownika
     * -# Kategorii tworzonego towaru  
     */
    public function init()
    {
        //wyszukanie wszystkich typów towarów z danej kategorii
        $mapper = new Application_Model_CommodityTypeMapper();
        $types = $mapper->fetchAll("Category_id = ".$this->_attribs['cat']);
        //tworzenie tablicy typów towarów
        if(!empty($types)){
            foreach ($types as $type) {
                $select[$type->getCommodityType_id()] = $type->getName();
            }
        } else {
            $select[0] = '-';
        }

        //dodawanie kontrolki wyboru typo towaru
        $this->addElement('select','CommodityType_id',array(
            'label'=>'Typ Towaru',
            'multiOptions'=> $select,

        ));
        //dodawanie pola tekstowego na nazwe towaru
        $this->addElement('text','name',array(
            'label'=> 'Nazwa:',
            ));
        //dodawanie pola na opis towaru
        $this->addElement('textarea','description',array(
            'Label'=>'Opis towaru',
            'required' => true,
            'cols'=>50,
            'rows=>'=>40,
        ));
        
  
       //wyszukanie lokalizacji wybanych wcześniej przez użytkownika
       $mapper = new Application_Model_NodeAffiliationMapper();
       $nodes = $mapper->fetchNodes($this->_attribs['user']);
       //tworzenie tablicy miejsc dostaw
       foreach ($nodes as $node){
           $locations['node.'.$node->getNetworkNode_id()] = 'L: '.$node->getNodeName();
           $q[] = $node->getNetworkNode_id();
       }
       //wyszukanie powiązanych połączeń
       $q2 = '('.implode(',',$q).')';
       
       $arcMapper = new Application_Model_NetworkArcMapper();
       $arcs = $arcMapper->fetchAll('predecessor in '.$q2.' or successor in '.$q2);
       //dodanie połączeń do poprzedniej tablicy
       foreach ($arcs as $arc) {
           $locations['arc.'.$arc->getNetworkArc_id()] = 'P: '.$arc->getPredecessorName().' - '.$arc->getSuccessorName();
       }
       

       //dodanie kontrolki wyboru miejsca dostawy 
       $this->addElement('select','location',array(
            'label'=>'Miejsce odbioru',
            'multiOptions'=>$locations,
        ));
       //dodanie pola tekstowego na datę początku okresu dostaw 
       $this->addElement('text','from',array(
            'label'=> 'Odbiór od: *',
            ));
       //dodanie pola tekstowego na datę końca okresu dostaw
       $this->addElement('text','to',array(
            'label'=> 'Odbiór do: *',
            ));
       
       //wyszukanie aktualnych okresów dostaw danego użytkownika zdefiniowanych w kalendarzu
       $periodMapper = new Application_Model_CalendarPeriodMapper();
       
       $select2[0] = '-';
       
       $query = 'startTime > NOW() and (periodType = "userDefined" and MarketEntity_id = "'.$this->_attribs['user'].'")';
       $periods = $periodMapper->fetchAll($query);
       //tworzenie tablicy terminów dostaw
       foreach($periods as $period){
           $select2[$period->getCalendarPeriod_id()] = 'Użytkownika: '.$period->getName();
       };
       //wyszukanie aktualnych globalnych okresów dostaw zdefiniowanych w kalendarzu
       $query = 'startTime > NOW() AND periodType = "global"';
       $periods = $periodMapper->fetchAll($query);
       //tworzenie tablicy terminów dostaw 2
       foreach($periods as $period){
           $select2[$period->getCalendarPeriod_id()] = 'Globalny: '.$period->getName();
       };
       
       //dodanie kontrolki wyboru okresów dostaw z kalendarza
       $this->addElement('select','period',array(
            'label'=>'Okres odbioru **',
            'multiOptions'=>$select2,
       ));
        //dodanie przycisku akceptacji
        $this->addElement('submit','Stwórz',array(
           'label'=>'Stwórz' 
        ));
    }


}

